約 4,408,014 件
https://w.atwiki.jp/shells/pages/93.html
ブラウザにイメージ画像を描画する-Graphics/BufferedImageクラス- 【HP】 目次 ソースimage.jsp 実行結果 ソース image.jsp %@ page contentType="image/jpeg; charset=Shift_JIS" import="java.awt.*, java.awt.image.*, com.sun.image.codec.jpeg.*" % % BufferedImageobjBi= new BufferedImage( 200, 200, BufferedImage.TYPE_INT_RGB );// 画像のインスタンスの生成 GraphicsobjGrh= objBi.getGraphics(); objGrh.setColor( new Color( 255, 255, 255 ) ); objGrh.fillRect( 0, 0, 200, 200 );// 塗り潰し矩形を描画 objGrh.setFont( new Font( "HG丸ゴシックM-PRO", Font.BOLD,11 ) );// 描画フォントを指定 objGrh.setColor( new Color( 0, 0, 255 ) ); objGrh.drawString( "http //www.wings.msn.to/", 10, 180 ); objGrh.setColor( new Color( 230, 230, 180 ) ); objGrh.fillRect( 10, 10, 100, 100 ); objGrh.drawOval( 5, 5, 180, 180 ); JPEGImageEncoder objEnc= JPEGCodec.createJPEGEncoder( response.getOutputStream() ); objEnc.encode( objBi ); % 実行結果 イメージ画像が出力される 戻る
https://w.atwiki.jp/tikita/pages/185.html
GIMP用パレット GIMPでベース塗り 1 | 2 | 3 | 4 | 5 | 6 GIMPの インストール | スクリプト | パレット | 小ネタ集 ★GIMPによる塗りで使用するパレット GIMPで塗りを行う際に使用するパレットを作成しました。現在用意しているパレットは以下の8種類です。 パレット名 用途 元になっている色見本 群集ベース塗り 群集シーンベース塗り ベース塗り用パレットの「ベース塗り用色見本(群集)」 群集塗り 群集シーン塗り 群集用パレットの「群集色見本」 ベース塗り ドール別ベース塗り用 ベース塗り用パレットの「ベース塗り用色見本(キャラ別)」 真紅 ドール別 真紅 キャラ別パレットの「真紅色見本」 水銀燈 ドール別 水銀燈 キャラ別パレットの「水銀燈色見本」 翠星石 ドール別 翠星石 キャラ別パレットの「翠星石色見本」 雛苺 ドール別 雛苺 キャラ別パレットの「雛苺色見本」 蒼星石 ドール別 蒼星石 キャラ別パレットの「蒼星石色見本」 ※実際には、青字のパレット(群集用関連)はパレット名の前に「~Let s Go Maidens -」と、緑字のパレット(ドール別関連)はパレット名の前に「~Let s Go Maidens +」と付いています。 ★GIMPパレットのインストール ダウンロード パレットはこれ→Let'sGoMaidens-palette20070907.zipをダウンロードして持っていってください。 内容物 中には次のように8個のファイルが入っています。 ファイル名 パレット用途 Let sGoMaidens-palette-gunsyu-base.gpl 群集ベース塗り用 Let sGoMaidens-palette-gunsyu.gpl 群集塗り用 Let sGoMaidens-palette-base.gpl ドール別 ベース塗り用 Let sGoMaidens-palette-Reiner-Rubin.gpl ドール別 真紅 Let sGoMaidens-palette-Mercury-Lampe.gpl ドール別 水銀燈 Let sGoMaidens-palette-Jade-Stern.gpl ドール別 翠星石 Let sGoMaidens-palette-Kleine-Beere.gpl ドール別 雛苺 Let sGoMaidens-palette-Lapislazuri-Stern.gpl ドール別 蒼星石 インストール ダウンロードしたZIPファイルを解凍し、内容物をパレットファイル専用のディレクトリを用意してコピーします。パレットファイル以外のファイルが混在しているとGIMPがエラーメッセージを出力しますので、注意してください。 GIMPの設定 パレットファイルを適当なディレクトリにコピーしたら、GIMPから使用可能にします。ツールウィンドウの「ファイルメニュー」から「環境設定」として環境設定ダイアログを開き、「フォルダ」内の「パレット」タブを開きます。 デフォルトでは2つのパレットがあるはずです。一つはユーザーパレット(赤でマーク)で、ユーザーが作ったパレットはここに保存され、編集可能な状態となっています。もう一つはGIMPがもともと持っているパレット(緑でマーク)で、こちらは編集できない状態になっています。 ここに、新しくパレットを追加します。まず、白紙のアイコンをクリックしてパレットディレクトリの新規追加を選択します。続いて右端の「...」のアイコンをクリックします。 元のサイズ ディレクトリを選択するダイアログが現れますので、パレットファイルをコピーしたディレクトリを指定し「OK」とします。(画面はパレット作成中のものですのでパレットファイル名に最終版と相違があるかもしれません)。 元のサイズ 上で指定したディレクトリが、パレットディレクトリに追加されました。左端のチェックボックスはオフにしておいてください。これをオンにすると、パレットが編集可能になりますがパレット名・色名・カラーコードなどを不用意に変更してしまう恐れがあります。 あとは「OK」として設定を保存します。「GIMPを再起動後有効になる」といったメッセージが出るはずですので、GIMPを一旦終了して再び起動すると、新しく追加したパレットが利用可能となります。 元のサイズ ★パレット操作ウィンドウを開く パレットファイルをインストールしただけでは、パレットへのアクセスができませんので、パレットを参照するためのウィンドウを用意します。キャンバスウィンドウの「ダイアログ」メニューから「パレット」を選択します(またはショートカット「Ctrl + P」)。 元のサイズ 以下のようにパレットウィンドウが開きます。どのパレットでも構わないのでパレット名の左側のサムネイルをダブルクリックします。 今回は「Default」パレットをダブルクリックしてみました。このように、パレット編集ウィンドウが開きます。先ほど開いたパレットウィンドウは閉じてしまって構いません。 ウィンドウ右上の「左向き三角」をクリックすると、メニューがポップアップします。「タブに追加」から「パレット」を選択すると、パレットタブが追加されます。 ここから先は「パレット編集」タブを閉じないでください。「パレット」と「パレット編集」の2つのタブを一つのウィンドウにまとめて以降、「パレット」タブからパレットを選択すれば「パレット編集」タブに選択したパレットが表示されます(画面はパレット作成中のものですのでパレット名に相違があります)。 ついでにパレット関係のウィンドウに「色(描画色/背景色)」タブを追加しておくのは、色関係を一つのウィンドウでまかなえるという意味で、悪いアイデアでは無いでしょう。 ★パレットの並びなど パレット内の色の配列について説明します。パレットの色の配列は、ベース塗り用のベース色だけを含むパレットと、その他のパレットで多少異なります。 ベース塗り用パレット(群集ベース塗りパレットもほぼ同様) 5行×16列で構成されていて、上から「真紅・水銀燈・雛苺・翠星石・蒼星石」と並んでいます。パレット数はドールごとに異なりますが、8~10個のベース色を持ちます。左から「肌・髪・瞳・口・服の主色・服の副色・その他・靴」が基本的な配置となります(水銀灯のように、服色と靴色が同一だったり、翠星石・蒼星石のように瞳の色が2つというケースもあります)。 また、ベース塗りでの使用を考慮し、右側に塗り残しチェック用背景色を配置してあります。 ※群集ベース塗りパレットについては、パレット配置の下部にも上部と同じものが並べられています。ただし、色名が「レイヤーセット生成スクリプト」で生成されるものと合わせた名前になっています。 ドール別パレット(群集パレットもほぼ同様) 5行×16列を基本単位として構成されていますが、最上行と最左列は、各行・各列の説明となっています([↓水銀燈 - 肌]や[ハイライト→」など)。また色を縦方向に見ると、上(2行目)から下(5行目)に向かって「ハイライト・ベース色・1影色・2影色」となっています。 パレット数はドールごとに異なりますが、左から「肌・髪・瞳・口・服の主色・服の副色・その他・靴」が基本的な配置となります(水銀灯のように、服色と靴色が同一だったり、翠星石・蒼星石のように瞳の色が2つというケースもあります)。 ※最上行は、ベース色と同一のカラーコード設定にしてありますので、最上行だけを使用すればベース塗りができます。 ★カラーコード カラーコード一覧に、塗りで使用する色のカラーコードの一覧表があります。参考データとして使用してください。 パレット履歴 04 Aug 2007 初版 07 Sep 2007 第2版 カラーコード変更に対応 GIMPでベース塗り 1 | 2 | 3 | 4 | 5 | 6 GIMPの インストール | スクリプト | パレット | 小ネタ集
https://w.atwiki.jp/vbfa/pages/23.html
罫線を描画します Bordersで線の場所を指定し、LineStyleで罫線の種類、Weightで太さ、ColorIndexで色を設定します。 プロパティ 線の場所 xlDiagonalDown 右上がり斜め線 xlDiagonalUp 右上がり斜め線 xlEdgeTop 上辺 xlEdgeLeft 左辺 xlEdgeRight 右辺 xlEdgeBottom 下辺 xlInsideVertical 内側(範囲内)の水平線 xlInsideHorizontal 内側(範囲内)の垂直線 LineStyle 罫線種類 xlContinuous 実線 xlDot 破線 Weight 罫線の太さ xlHairline 極細線 xlThin 細線 xlMedium 太線 xlThick 極太線 ColorIndex 罫線の色 xlAutomatic 自動 色の種類番号(他参照) 色の種類 線の種類設定 Workbooks(ThisWorkbook.Name).Worksheets(1).Range("A1 Z10").Borders(線の場所).LineStyle = 線の種類 Workbooks(ThisWorkbook.Name).Worksheets(1).Range("A1 Z10").Borders(線の場所).Weight = 線の太さ Workbooks(ThisWorkbook.Name).Worksheets(1).Range("A1 Z10").Borders(線の場所).ColorIndex = 線の色
https://w.atwiki.jp/shibacho/pages/44.html
イメージの貼り付け 今回使わせていただいているイメージはどっかのサイト様からいただいたものなんですが・・・どこだか忘れてしまいました。ソースですが実行クラスは前回と全く同じなので掲載も省略します。( 実行クラスは毎回アノ内容です。変更するのはタイトルの名前くらぃです )MainPanelクラスですがImageIconクラスのiconオブジェクトを作成してそこにイメージを取り込んでます。取り込んだイメージをimageに渡してそれをpaintComponentで描画しているだけです。なぜ1度iconに取り込んだイメージをimageに渡しているのかというと、iconのままではdrawImageで描画することができないためです。 public MainPanel(){ //パネルの推奨サイズを設定 setPreferredSize(new Dimension(WIDTH,HEIGHT)); //イメージを読み込む ImageIcon icon=new ImageIcon(getClass().getResource("/image/img001.gif")); image=icon.getImage(); } public void paintComponent(Graphics g){ //イメージをパネルに貼る g.drawImage(image,0,0,this); } サンプルのJARファイルはスポンサーリンクの↓に張ってあるので自由にダウンロードしてくださぃ♪
https://w.atwiki.jp/abwiki/pages/269.html
フラットツールバーにホットイメージ機能を付け加えます。ホットイメージとは、1つのボタンに対し、通常画像と浮き上がったときの画像を持たせる機能のことです。今回は、フルカラーのボタンイメージを採用するので、なかなかの見栄えになるかと思います。 今回作成するプログラムのサンプルファイルを置いておきますので、参考にしたい方はどうぞ☆ Toolbar3.zip(プロジェクトに必要なファイルがすべて入っています) 前回(ステップ25)のソースプログラムに変更を加える形で作業を進めていきます。前回からの変更箇所を太字で示しています。新規にプロジェクトを作成させる方は、プロジェクトオプションで「コモンコントロールを使用する」にチェックを入れておくのを忘れないようにしましょう。 チェックしておきたい関数は? コモンコントロールのイメージリスト機能を使用するため、ImageList_LoadImage関数を使用します。この関数は、以下のようなパラメータを持ちます。 ImageList_LoadImage( _ hi As DWord, _ '[[インスタンス]][[ハンドル]](GetModuleHandle関数で取得) lpbmp As BytePtr, _ 'リソース内のビットマップID cx As Long, _ 'ビットマップ(ボタン)の幅 cGrow As Long, _ '初期イメージを越したときに新しく割り当てるイメージの数 crMask As DWord, _ '透明色 uType As DWord, _ 'IMAGE_BITMAP、IMAGE_CURSOR、IMAGE_ICON のいずれかを指定 uFlags As DWord _ 'オプション[[フラグ]] ) As DWord ※関数が成功すると、イメージリストのハンドルが返ります。 今回はフルカラーのビットマップを読み込むため、uFlagsのオプションフラグには、LR_CREATEDIBSECTION を指定しておきます。 また、イメージリストの使用が終了したら、ImageList_Destroy関数でイメージを破棄する必要があります。 ツールバーボタンの画像を準備 今回は、2つの画像(通常時の画像と、選択時の画像)を用意します。それぞれ、右クリックで「対象をファイルに保存」を指定し、プロジェクト内に保存しておいて下さい。(以前の "toolbutton.bmp" が存在する場合は、上書きを行って下さい) toolbutton.bmp、toolbutton_hot.bmp ToolbarプロジェクトのBitmapリソースにこの2つのファイルを挿入します。"toolbutton.bmp" のIDを IDB_BITMAP1 に、"toolbutton_hot.bmp" のIDを IDB_BITMAP2 にセットしておきます。 新規にプロジェクトを作成している方は、ステップ24を参考に、メニュー("MainMenu")の作成をしておきましょう。 コーディング "MainWnd.sbp" を開き、以下のプログラムをコーディングしていきましょう。 ' ---------------------------------------------------------------------------- ' イベント プロシージャ ' ---------------------------------------------------------------------------- ' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。 ' ウィンドウ ハンドル hMainWnd ' メモ - 以下の領域を、変数、構造体、定数、関数を宣言するための、 ' グローバル領域として利用することができます。 ' ----------------------------------ここから---------------------------------- Const ID_TOOLBAR = 70 'ツールバーのID Dim hImageList As DWord 'イメージリストのハンドル Sub SetTbButtonData(ByRef ptb As TBBUTTON, iBitmap As Long, idCommand As Long, fsState As Byte, fsStyle As Byte) 'ptb(TBBUTTON構造体)にボタン情報を格納する [[With]] ptb .iBitmap=iBitmap .idCommand=idCommand .fsState=fsState .fsStyle=fsStyle .dwData=0 .iString=0 [[End]] With End Sub ' ----------------------------------ここまで---------------------------------- ↑先頭部分では、イメージリストのハンドルを保存するためのhImageList変数を定義します。 Sub MainWnd_Destroy() 'イメージリストを破棄 ImageList_Destroy(hImageList) Toolbar_DestroyObjects() PostQuitMessage(0) End Sub ↑Destroyイベントでは、ImageList_Destroy関数を使用してイメージリストを破棄します。 Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) Dim ic As INITCOMMONCONTROLSEX Dim tbb[4] As TBBUTTON Dim style As Long Dim hToolbar As DWord 'コモンコントロールの初期化 ic.dwSize=[[Len]](ic) ic.dwICC=ICC_BAR_CLASSES InitCommonControlsEx(ic) 'ボタン情報をセット SetTbButtonData(tbb[0],0,IDM_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON) SetTbButtonData(tbb[1],1,IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON) SetTbButtonData(tbb[2],2,IDM_SAVE,TBSTATE_ENABLED,TBSTYLE_BUTTON) SetTbButtonData(tbb[3],0,0,TBSTATE_ENABLED,TBSTYLE_SEP) SetTbButtonData(tbb[4],3,IDM_ABOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON) 'ツールバーを生成 hToolbar=CreateToolbarEx(hMainWnd, _ WS_CHILD or WS_VISIBLE, _ ID_TOOLBAR, _ 4, _ GetModuleHandle(0), _ IDB_BITMAP1, _ tbb, _ 5, _ 0,0, _ 16,15, _ Len(tbb[0])) 'ウィンドウスタイルにTBSTYLE_FLATを追加 style=GetWindowLong(hToolbar,GWL_STYLE) style=style or TBSTYLE_FLAT SetWindowLong(hToolbar,GWL_STYLE,style) 'イメージリストを作成(フルカラー) hImageList=ImageList_LoadImage(GetModuleHandle(0), _ IDB_BITMAP2, _ 16, 0, [[RGB]](192,192,192), _ IMAGE_BITMAP,LR_CREATEDIBSECTION) 'ホットイメージを設定 SendMessage(hToolbar, TB_SETHOTIMAGELIST, 0, hImageList) End Sub ↑Createイベントでは、作成したイメージリストをホットイメージとしてツールバーに割り当てています。割り当てには、TB_SETHOTIMAGELIST メッセージを使用します。TB_SETHOTIMAGELIST メッセージでは、wParamは無視され、lParamにイメージリストのハンドルを指定します。 Sub MainWnd_IDM_NEW_MenuClick() MessageBox(hMainWnd, "新規作成", "Test of Toolbar", MB_OK) End Sub Sub MainWnd_IDM_OPEN_MenuClick() MessageBox(hMainWnd, "開く", "Test of Toolbar", MB_OK) End Sub Sub MainWnd_IDM_SAVE_MenuClick() MessageBox(hMainWnd, "保存", "Test of Toolbar", MB_OK) End Sub Sub MainWnd_IDM_EXIT_MenuClick() SendMessage(hMainWnd,WM_CLOSE,0,0) End Sub Sub MainWnd_IDM_ABOUT_MenuClick() MessageBox(hMainWnd, "ツールバー[[テスト]] Ver1.0", "バージョン情報", MB_OK) End Sub ↑これらのダミーメッセージに変更点はありません。 これで作業は完了です。自分のアプリケーションで色鮮やかなツールバーが踊るのは悪い気分ではありませんね☆
https://w.atwiki.jp/directx/pages/19.html
三角形を描画します。 なぜ三角形なのか?というのもDirectXの描画のほとんどは内部で三角ポリゴンを使っているからです。 全ての基本という事になります。 #include d3d9.h #include d3dx9.h #define SAFE_RELEASE(p) {if(p){(p)- Release();(p)=NULL;}}//安全に解放する LPDIRECT3D9 g_pD3D = NULL;//Direct3D9 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;//レンダリングデバイス LPD3DXFONT g_pFont = NULL; //フォント LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;//頂点バッファ //頂点構造体 struct CUSTOMVERTEX { FLOAT x, y, z, rhw; //各座標,wの逆数 DWORD color; //頂点カラー }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE) //Direct3D初期化 HRESULT InitD3D( HWND hWnd ) { //Direct3Dを生成する if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION))){return E_FAIL;} //デバイス生成用のパラメーター D3DPRESENT_PARAMETERS d3dpp;//パラメーター構造体 ZeroMemory( d3dpp, sizeof(d3dpp) );//ゼロで初期化 d3dpp.Windowed = TRUE;//ウインドウモードで起動 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//バックバッファのスワップエフェクト Direct3Dにスワップエフェクトをまかせる d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;//バックバッファのフォーマット 今表示されているモニタの設定と同じ d3dpp.BackBufferCount = 1;//バックバッファの数 d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;//マルチサンプリングは行わない d3dpp.MultiSampleQuality = 0;//マルチサンプリングは行わないので0 //d3dpp.EnableAutoDepthStencil = TRUE;//Direct3Dに深度バッファの管理をまかせる d3dpp.AutoDepthStencilFormat = D3DFMT_D16;//深度バッファのフォーマット(通常はこの値で問題ない) d3dpp.hDeviceWindow = hWnd;//カバーウィンドウ=アプリケーションのウィンドウ d3dpp.Flags = 0;//フラグは使わない d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;//今のリフレッシュレートをそのまま使う d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;//モニタの垂直回帰を待つ //Direct3Dデバイスの生成 HAL(ハードウェアアクセラレーション) if(FAILED(g_pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp, g_pd3dDevice))){ //HALが駄目ならHEL(ソフトウェアエミュレーション) if(FAILED(g_pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp, g_pd3dDevice))){ //駄目なら終了 return(E_FAIL); } } return S_OK; } //頂点バッファの初期化 HRESULT InitVB() { //頂点データのセット CUSTOMVERTEX Vertices[] = { { 320.0f, 50.0f, 0.5f, 1.0f, 0xffffff00, }, // x, y, z, rhw, color { 590.0f, 430.0f, 0.5f, 1.0f, 0xffffff00, }, { 50.0f, 430.0f, 0.5f, 1.0f, 0xffffff00, }, }; //頂点バッファの生成 if( FAILED( g_pd3dDevice- CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, g_pVB, NULL ))){return E_FAIL;} //デバイスメモリーに書き込むためにロックする VOID* pVertices;//デバイスメモリー用 if( FAILED(g_pVB- Lock(0,sizeof(Vertices),(void**) pVertices,0))){return E_FAIL;}//pVerticesを頂点バッファのデバイスメモリーにする memcpy( pVertices, Vertices, sizeof(Vertices) );//頂点データをコピー g_pVB- Unlock();//ロック解除 return S_OK; } //フォントの初期化 HRESULT InitFont(HWND hWnd) { //フォントの生成 MSゴシック //デバイス,文字高さ,文字幅,フォントスタイル,ミップマップのレベル,斜体にするかどうか,文字セット,出力精度,出力品質,フォントピッチとファミリ,フォント名,フォントポインタ HRESULT hr = D3DXCreateFont( g_pd3dDevice, 24, 0, FW_HEAVY, 1, false, SHIFTJIS_CHARSET, OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE, L MS ゴシック , g_pFont ); if FAILED(hr){return(E_FAIL);} return S_OK; } //終了時解放処理 VOID Cleanup() { SAFE_RELEASE(g_pVB); SAFE_RELEASE(g_pFont); SAFE_RELEASE(g_pd3dDevice); SAFE_RELEASE(g_pD3D); } //レンダリング VOID Render() { //デバイスが無いなら終了 if(NULL==g_pd3dDevice){return;} //バックバッファのクリア g_pd3dDevice- Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,150, 255), 1.0f, 0 ); //シーンの開始 if(SUCCEEDED(g_pd3dDevice- BeginScene())) { //ここに処理内容を書く RECT rect; SetRect( rect,0,0,50,50);//描画位置 //スプライトポインタ(無くても良し),描画文字,文字数(-1で全部),描画範囲,フォーマット,色 g_pFont- DrawText(NULL, L 三角形の描画 , -1, rect, DT_LEFT | DT_NOCLIP, D3DCOLOR_ARGB(255, 0, 0, 0)); //ストリームソースのセット g_pd3dDevice- SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); //FVFのセット g_pd3dDevice- SetFVF( D3DFVF_CUSTOMVERTEX ); //三角形描画 g_pd3dDevice- DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); //シーンの終了 g_pd3dDevice- EndScene(); } //バックバッファを表画面に反映させる g_pd3dDevice- Present( NULL, NULL, NULL, NULL ); } //メッセージプロシージャ LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY //終了時 Cleanup(); PostQuitMessage(0); return 0; case WM_PAINT //ウインドウ描画時 Render(); return 0; case WM_SIZE //ウインドウサイズ変更時 InvalidateRect(hWnd,NULL,true);//画面更新 return 0; } return DefWindowProc( hWnd, msg, wParam, lParam ); } //メイン関数 INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT ) { //ウインドウクラスの登録 WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L Window1 , NULL }; RegisterClassEx( wc ); //タイトルバーとウインドウ枠の分を含めてウインドウサイズを設定 RECT rect; SetRect( rect,0,0,640,480); AdjustWindowRect( rect, WS_OVERLAPPEDWINDOW, FALSE); rect.right=rect.right-rect.left; rect.bottom=rect.bottom-rect.top; rect.top=0; rect.left=0; //ウインドウの生成 HWND hWnd = CreateWindow( L Window1 , L Hello DirectX9 World !! , WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom, NULL, NULL, wc.hInstance, NULL ); //Direct3D初期化 if(SUCCEEDED(InitD3D(hWnd))) { InitFont(hWnd); InitVB(); //ウインドウ表示 ShowWindow(hWnd,SW_SHOWDEFAULT); UpdateWindow(hWnd); //メッセージループ MSG msg; while( GetMessage( msg,NULL,0,0)) { TranslateMessage( msg); DispatchMessage( msg); } } UnregisterClass(L Window1 ,wc.hInstance); return 0; }
https://w.atwiki.jp/ketcindy/pages/154.html
Setwindow([2,3],[-1,1]); 横軸の範囲と縦軸の範囲で矩形の描画領域を設定する. 第1引数は横軸の範囲,第2引数は縦軸の範囲を設定する. 描画領域のデフォルトは横軸の範囲[-5,5],縦軸の範囲[-5,5]である. 注) cinderella画面では描画領域外でも表示されるが,pdfでは描画領域内しか表示されない. #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (title=) setwindow.zip Addax(1); Setax([7,"se"]); Setwindow([-pi,pi],[-1.5,1.5]); // x座標が-pi以上pi以下,y座標が-1.5以上1.5以下で描画領域を設定する. Plotdata("1","sin(x)","x"); Listplot("1",[ [XMIN,1],[XMAX,1] ],["da"]); Listplot("2",[ [XMIN,-1],[XMAX,-1] ],["da"]); Htickmark([-pi,"n","-\pi",pi,"sw","\pi"]); Vtickmark([-1,"sw","-1",1,"nw","1"]);
https://w.atwiki.jp/akiwada/pages/71.html
情報科学屋さんを目指す人のメモ (C#+.NET)描画内容をドラッグで移動して、ホイールで拡大縮小 VisualBasic .Net 入門教室 C#でゲームプログラム講座 FPSタイマー @IT:.NET TIPS ダブル・バッファリングにより描画を行うには? - C# VB.NET Windowsフォーム
https://w.atwiki.jp/isoroku_be/pages/50.html
情報 作者名:はっぱ 引用元:なでしこプログラム掲示板「はっぱのサンプル集57」 概要 ベジェゴン描画:曲線で囲まれた図形を描画する。 曲線描画:曲線を描画する。 解説 引数 座標列:座標(CSV) 返り値 なし サンプルプログラム //テスト 線太さは1 塗りスタイルは『べた』 塗り色は$AA9988 『200,200,300,200,300,50,400,50,400,200,500,200,500,250,350,250,200,250』でベジェゴン描画 線色は青色 線太さは3 『120,130,100,150,150,180,180,100,120,50』で曲線描画 //本体 最大区分数とは整数 最大区分数は50 ●ベジェゴン描画(座標列で) 点列とは配列 曲線配列とは配列 点位置とは配列 リピート数とは整数 倍率とは整数 点列は座標列を『,』で区切る もし(点列の配列要素数) 6ならば 戻る 最大区分数はFLOOR(128/(点列の配列要素数))//エラー対策 点列に点列[0]を配列追加 点列に点列[1]を配列追加 点列に点列[2]を配列追加 点列に点列[3]を配列追加 点列に点列[4]を配列追加 点列に点列[5]を配列追加 リピート数はINT(((点列の配列要素数)-6)/2) リピート数の回 点位置[0]は点列[回数*2] 点位置[1]は点列[回数*2+1] 点位置[6]は点列[回数*2+2] 点位置[7]は点列[回数*2+3] 倍率はSQRT((点位置[6]-点位置[0])^2+(点位置[7]-点位置[1])^2)とSQRT((点列[回数*2-2]-点位置[6])^2+(点列[回数*2-1]-点位置[7])^2)の割り算 点位置[2]は点位置[0]+(点位置[6]-点列[回数*2-2])*倍率*0.4 点位置[3]は点位置[1]+(点位置[7]-点列[回数*2-1])*倍率*0.4 倍率はSQRT((点位置[0]-点位置[6])^2+(点位置[1]-点位置[7])^2)とSQRT((点位置[0]-点列[回数*2+4])^2+(点位置[1]-点列[回数*2+5])^2)の割り算 点位置[4]は点位置[6]+(点位置[0]-点列[回数*2+4])*倍率*0.4 点位置[5]は点位置[7]+(点位置[1]-点列[回数*2+5])*倍率*0.4 曲線配列に(((点位置を『,』で配列結合)のベジェ曲線)の終点カット)を配列追加 曲線配列は曲線配列を『,』で配列結合 最大区分数は50//エラー対策:解除 母艦に曲線配列で多角形 ●曲線描画(座標列で) 点列とは配列 曲線配列とは配列 点位置とは配列 リピート数とは整数 倍率とは整数 点列は座標列を『,』で区切る もし(点列の配列要素数) 6ならば 座標列を連続線描画 戻る リピート数は((点列の配列要素数)-2)/2 リピート数の回 点位置[0]は点列[(回数-1)*2] 点位置[1]は点列[(回数-1)*2+1] 点位置[6]は点列[(回数-1)*2+2] 点位置[7]は点列[(回数-1)*2+3] もし回数 =1ならば 倍率はSQRT((点位置[0]-点位置[6])^2+(点位置[1]-点位置[7])^2)とSQRT((点位置[0]-点列[(回数-1)*2+4])^2+(点位置[1]-点列[(回数-1)*2+5])^2)の割り算 点位置[4]は点位置[6]+(点位置[0]-点列[(回数-1)*2+4])*倍率*0.4 点位置[5]は点位置[7]+(点位置[1]-点列[(回数-1)*2+5])*倍率*0.4 点位置[2]は点位置[0]+(点位置[4]-点位置[0])*0.7 点位置[3]は点位置[1]+(点位置[5]-点位置[1])*0.7 違えば もし回数 =リピート数ならば 倍率はSQRT((点位置[6]-点位置[0])^2+(点位置[7]-点位置[1])^2)とSQRT((点列[(回数-1)*2-2]-点位置[6])^2+(点列[(回数-1)*2-1]-点位置[7])^2)の割り算 点位置[2]は点位置[0]+(点位置[6]-点列[(回数-1)*2-2])*倍率*0.4 点位置[3]は点位置[1]+(点位置[7]-点列[(回数-1)*2-1])*倍率*0.4 点位置[4]は点位置[6]+(点位置[2]-点位置[6])*0.7 点位置[5]は点位置[7]+(点位置[3]-点位置[7])*0.7 違えば 倍率はSQRT((点位置[6]-点位置[0])^2+(点位置[7]-点位置[1])^2)とSQRT((点列[(回数-1)*2-2]-点位置[6])^2+(点列[(回数-1)*2-1]-点位置[7])^2)の割り算 点位置[2]は点位置[0]+(点位置[6]-点列[(回数-1)*2-2])*倍率*0.4 点位置[3]は点位置[1]+(点位置[7]-点列[(回数-1)*2-1])*倍率*0.4 倍率はSQRT((点位置[0]-点位置[6])^2+(点位置[1]-点位置[7])^2)とSQRT((点位置[0]-点列[(回数-1)*2+4])^2+(点位置[1]-点列[(回数-1)*2+5])^2)の割り算 点位置[4]は点位置[6]+(点位置[0]-点列[(回数-1)*2+4])*倍率*0.4 点位置[5]は点位置[7]+(点位置[1]-点列[(回数-1)*2+5])*倍率*0.4 曲線配列は点位置を『,』で配列結合 曲線配列のベジェ曲線を連続線描画 ●割り算(左値と右値の) もし右値が0でなければ (左値/右値)で戻る 0で戻る ●連続線描画(座標列を) 点列とは配列 点列は座標列を『,』で区切る (((点列の配列要素数)-2)/2)の回 母艦の点列[(回数-1)*2],点列[(回数-1)*2+1]から点列[(回数-1)*2+2],点列[(回数-1)*2+3]へ線 ●終点カット(座標列の) 点列とは配列 曲線配列とは配列 点列は座標列を『,』で区切る ((点列の配列要素数)-2)の回 曲線配列に点列[回数-1]を配列追加 (曲線配列を『,』で配列結合)で戻る ●ベジェ曲線(座標列の) 点列とは配列 区分数とは整数 曲線配列とは配列 tとは整数 点列は座標列を『,』で区切る 区分数はINT(SQRT((点列[6]-点列[0])^2+(点列[7]-点列[1])^2)/10) もし区分数 10ならば 区分数は10 もし区分数 最大区分数ならば 区分数は最大区分数 曲線配列に(0,点列[0],点列[2],点列[4],点列[6]から点位置計算)を配列追加 曲線配列に(0,点列[1],点列[3],点列[5],点列[7]から点位置計算)を配列追加 区分数の回 tは回数/区分数 曲線配列に(t,点列[0],点列[2],点列[4],点列[6]から点位置計算)を配列追加 曲線配列に(t,点列[1],点列[3],点列[5],点列[7]から点位置計算)を配列追加 曲線配列を『,』で配列結合で戻る ●点位置計算(t,P1,P2,P3,P4から) sとは整数 sは1-t INT((s^3)*P1+3*(s^2)*t*P2+3*s*(t^2)*P3+(t^3)*P4)で戻る /*曲線 ベジェゴン*ここまで*/ 名前 コメント
https://w.atwiki.jp/kindaidensan/pages/21.html
画像の描画 今回は画像の描画です。ゲームでとても重要な部分です。今回から外部のファイルを読み込む手順が存在するので、ファイル名やディレクトリ名の誤字に十分気をつけましょう。いろいろややこしいことが増えるので文章量が長いです。 画像の用意 画像はこちらで用意しました。上で表示されてる画像を右クリックから保存してください(名前はplayer01.png)。某ゲームに出てくる某々の色違いみたいなやつですが、筆者が描いた絵なので著作権フリーです。改変なり再配布なり自由にどうぞ。 自分で画像を用意してもいいです。画像を読み込める形式はgif,jpeg,png,bmpなどがあります。透明化も扱えてきれいなpngが一番いいと思います。自分の画像の名前をこちらで用意した画像と同じ(player01.png)にしておいたほうが余計な混乱をせずにすみます。 tips 動画gifを読み込んだ場合画像を表示させるだけでアニメーションします。ただちらつくことがあるのであまりおすすめしません。 画像の名前について 画像のファイル名(というかプログラムから読み込むテキストとか音声ファイルとかのファイル名)について注意点があります。ファイル名のアルファベットはすべて小文字にしてください。 理由は、Eclipseで実行した場合には指定したファイル名の大文字小文字が違っていてもファイルを読み込んでくれるのですが、後で解説する実行可能jar(ゲーム配布用の形式)にした場合、大文字小文字が違うと読み込んでくれません。なので、「Eclipseでは実行できるのに実行可能jarでは実行できない(泣)」みたいなことになります。すべて小文字にしておけばこういう事態が回避できます。 大文字小文字の問題はOS間でも結構もんだいになるので気をつけましょう。ちなみに、ファイル名に日本語(全角文字)を使うのは、多分問題になりませんが……もしかしたらLINUXとかで問題になるかも……?あんまり推奨では無いので普通にアルファベット+数字+半角記号が無難です。 別の話ですが、画像の名前の付け方はEclipseでは標準でアルファベット順でファイルを並び替えるってことを念頭に置いてつけると良いかもしれません(プレイヤー用の画像なら先頭にpが、敵用ならeが来るみたいな。でもあまり多くなるならディレクトリ作って分けたほうが良いです)。 今回使う画像についてる01という数字は辞書順に並び替えたときにちゃんと数字どおり並ぶようにするためのものです(こうしないと1,10,11...19,2,20みたいになる)。今回使う画像は1つなので意味はありませんが、追加することも考えて初めからナンバリングつけとくと後が楽です。 画像の設置場所 画像はプロジェクトのsrcディレクトリ内ならどこでも読み込めます。直下においてもいいですが、画像ファイルなどはresourcesディレクトリなどにまとめて置くのが普通です。今回はresourcesディレクトリを作ってその中に入れましょう。 プロジェクト・エクスプローラーで「src」ディレクトリを右クリック 「新規」→「その他」をクリック 「一般」の中の「フォルダー」を選択して「次へ」 「src」が選択されているはず(されていなければ選択)なので、「フォルダー名」に「resources」と入力して「完了」 これでsrcディレクトリ内にresourcesディレクトリが作られたはずです。(一応今再ですがディレクトリとフォルダーは同じ意味)あとはダウンロードした画像をFinderやファイルエクスプローラーで右クリックで「コピー」して、resourcesディレクトリで右クリから「貼り付け」するだけです。(ちゃんとやりたい人はresourcesディレクトリを右クリックしてインポート選択してやる手順ありますけど、結果は同じことなので手順は述べません。ググれば出てきます。) コピー&ペーストで画像がresourcesディレクトリに入っているのを確認したら次は画像の読み込みです。 もし、貼り付けをミスって別のディレクトリに入っても右クリックから「削除」で消せます。 ここまでできていれば画像を表示させることができます。以下のソースを打ち込んでみましょう。 インポート文とフィールドとコンストラクタとdrawメソッドが変更点です。 //------------//変更点開始/////////////////import java.awt.Image;import densan.s.game.image.ImageLoader;///////////////////変更点終了//------------import java.awt.Color;import densan.s.game.drawing.Drawer;import densan.s.game.manager.GameManager;import densan.s.game.manager.Updatable; public class TestGame implements Updatable {//------------//変更点開始/////////////////private Image playerImage;///////////////////変更点終了//------------//初期化public TestGame() {//------------//変更点開始/////////////////playerImage = ImageLoader.load("resources/player01.png");///////////////////変更点終了//------------}//描画@Overridepublic void draw(Drawer d) {//------------//変更点開始///////////////////もともとのdrawメソッドの中身は全て消しました。//画像を描画d.drawImage(playerImage, 200, 100);///////////////////変更点終了//------------ }//更新@Overridepublic void update() {// まだ使わない }//初期化public static void main(String[] args) {//ゲームを管理するクラスを取得GameManager gm = GameManager.getInstance();//このメソッドでウインドウを表示する//引数はそれぞれ(幅, 高さ, タイトルバーに表示する文字)gm.createFrame(800, 600, "テストゲーム");//更新と描画を担うオブジェクトを設定gm.setUpdatable(new TestGame());} } このコードは画像の読み込み部分と表示部分に分かれています。このコードを実行すると以下の画像のようになります。それでは解説していきます。 ※Windowsで実行したので今までのスクショとちょっと見た目が違います。左上に画像が出てれば問題ありません。 画像の読み込み 19行目で追加したImage型の変数に28行目で読み込んだ画像を代入しています。 19行目のImageクラスは標準ライブラリの画像を表すクラスです。このImage型変数に読み込んだ画像を入れたり引数で渡したりして画像を受け渡します。 画像の幅と高さを取得することもできます。Image変数.getWidth(null)で幅を取得。 Image変数.getHeight(null)で高さを取得。 引数の中身はnullでOK。 Imageについて詳しくはhttps //docs.oracle.com/javase/jp/8/docs/api/java/awt/Image.html 28行目ImageLoaderクラスはDJGLの画像読み込みに使うクラスです。画像読み込みに使うのはloadメソッドです。staticメソッドなのでクラス名.メソッドで使えます。引数は画像のsrcからのパスの文字列型です。src直下においていればファイル名そのままです。 src内のディレクトリならば、「/」で区切ってパスを指定してください。 今回はresourcesディレクトリ内のplayer01.pngなので「resources/player01.png」としています。 階層が深くなるごとに「resources/pic/player/player01.png」みたいになっていきます。 ImageLoaderでは読み込んだ画像をキャッシュに保存しているので、別々の場所で同じ画像をロードしても同じインスタンスが帰ってきます。なので読み込みの容量を考えてImageクラスを使いまわしたりする必要はありません。 ただし、ImageLoaderで取得したImageを何らかの手段で変更した場合、同じ画像をロードしてる別のImageも同じように変化するので気をつけてください。DJGLの機能だけでいろいろする分には気にしなくていいです。 将来的に可変にしたりするかも。 今読み込んでいるキャッシュを削除したい場合はclearCache()メソッド(static)を呼んで下さい。 ImageLoaderについて詳しくはhttp //kiki33.bitbucket.org/densan/s/game/image/ImageLoader.html 画像のロードはコンストラクタ(24~32行目)で行っています。画像のロードは1回だけでいいので、newされたときに1回だけ呼ばれるコンストラクタで行っています。 画像の描画 41行目で画像を描画しています。以前あったdrawメソッドの中身はみやすさのためにすべて消してますが、本当はいらなくなったコードでもコメントアウト(//~とか/*~*/とか)したほうがいいです。実は必要とか後で参考になるとかあるので。あまり量が増えるならば毛した方がいいですが、コードはできるだけ消さずにコメントアウトして残しておきましょう。 画像を描画するメソッドはDrawerのdrawImageメソッドです。引数は(Imageクラス、X座標、Y座標)です。 ImageクラスにはImageLoaderで読み込んだ画像をそのまま入れましょう。 X座標、Y座標で指定するのは画像の左上の頂点の座標です。(drawRectと同じ)指定座標を中心に描画したければ画像の幅と高さを取得して半分だけずらす必要があります。そのあたり自動化したメソッド作るかも……。 背景が白なのでわかりにくいですが、画像に透明の部分があった場合そのまま透明に描画されます。半透明も半透明になります。(半透明はちょっと重いかも) 画像を描画するメソッドにはこの他にも描画される範囲を指定するものや画像を反転・回転して描画するものもあります。それは別のページで解説します。 Drawerについて詳しくはhttp //kiki33.bitbucket.org/densan/s/game/drawing/Drawer.html まとめ 今回は画像の描画について解説しました。画像は一番ゲームの見た目を左右する部分です。ゲームの内容がアレでも画像が良ければそれなりに見えます。プログラマにとってはゲーム作る上での画像の用意が一番難題だったりします。フリー素材なども使っていきましょう。ただし素材の利用規約などはよく確認しましょう。 名前 コメント すべてのコメントを見る